package main

import "fmt"

func main() {
	// var a = [3]int{1, 2, 3} // 数组
	var a []int           // 没有赋初值，也就是说没有手动初始化，Go 会给你个零值，给的标头值
	fmt.Println(a == nil) // 标头值有了，ptr悬空说明没有底层数组，len=0，cap=0
	fmt.Printf("len=%-2d, cap=%-2d\n", len(a), cap(a))

	var b = []int{1, 2, 3} //[]int Type, {}表示字面量开始了
	fmt.Printf("b %p, %p, len=%-2d, cap=%-2d\n", b, &b[0], len(b), cap(b))

	var c = []int{} // 初始化了，有标头值，分配了底层数组，ptr 有所指
	fmt.Println(c == nil)
	fmt.Printf("c %p, len=%-2d, cap=%-2d\n", c, len(c), cap(c)) // c[0] 取不到
	// print(c)

	s1 := make([]int, 10) // make定义 slice(2~3,1 类型,2 3)、map、channel
	fmt.Printf("s1 %p, %p, len=%-2d, cap=%-2d, %v\n", s1, &s1[0], len(s1), cap(s1), s1)
	s2 := make([]int, 10, 15)
	fmt.Printf("s2 %p, %p, len=%-2d, cap=%-2d, %v\n", s2, &s2[0], len(s2), cap(s2), s2)

	s3 := make([]int, 0) // []int{}
	fmt.Printf("s3 %p, len=%-2d, cap=%-2d, %v\n", s3, len(s3), cap(s3), s3)

	s4 := make([]int, 0, 10)
	fmt.Printf("s4 %p, %p, len=%-2d, cap=%-2d, %v\n", s4, &s2[0], len(s4), cap(s4), s4)

}
